home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 5 / The 640 Meg Shareware Studio CD-ROM Volume V (Data Express)(1994).ISO / amiga / tempdemo.lha / ProgrammersInfo / Nuke.mod.c < prev    next >
C/C++ Source or Header  |  1994-05-22  |  19KB  |  734 lines

  1. /*
  2.                               NUKE MODULE v1.0
  3.  
  4.                     (NUKE KILLER : TEMPEST FAKER)
  5.  
  6.  
  7.  
  8. [NUKE Module v_._] [Tempest Faker]   By The SkeletoN [__-__-__]
  9. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  10.  
  11. [Return = Quit] Conference Number:
  12.  
  13. [Return = None] File Number:
  14.  
  15.  
  16.  
  17. CONFERENCE [2:AMIGA WAREZ]
  18.  
  19.   #  File Name    Date        Size Description
  20. ===============================================================================
  21.  403 12345678.DMS 07-13-92 1403000:Junk / Fake / Old / Renamed / Shit
  22.                                   :
  23.                                   :
  24.                                   :
  25.                                   :
  26.                                   :
  27.                                   :
  28. Listing Stats: Offline            :
  29.   Drive Stats: Deleted             [UPLOADER]
  30. ===============================================================================
  31.  1 : Remove from Catalog & Take Credits    5 : Macros for Date field
  32.  2 : Delete from Drive   & Take Credits    6 : Macros for Last description line
  33.  3 : From Catalog, Drive & Take Credits    - : Leave Warning to Uploader
  34.  4 : Take credits only                     - : Give credits back to downloaders
  35.  
  36. [Return = None] Select [1-6]:
  37.  
  38. Remove Credits? [Return = No] [1x-9x]:
  39.  
  40. [             The Skeleton] Old Stats:  1,000,000,000 UL Bytes | 1000 # Uploads
  41.                                       -   100,000,000    Bytes |   50   Uploads
  42.                                       =========================|===============
  43.                             New Stats:    900,000,000 UL Bytes |  950 # Uploads
  44.  
  45. [Return = None] File Number:
  46.  
  47.  
  48. ===============================================================================
  49.                           Quick Macros [For Date]
  50. ===============================================================================
  51.  1: -Deleted  |  3: -Ancient  |  5: -NoPacks  |  7: =Broken=  |  9: ==Nuked=
  52.  2: =Slayed=  |  4: -Offline  |  6: ==Fake==  |  8: -Renamed  |  0: =Banned=
  53. ===============================================================================
  54.  
  55.                            [--/--/--]  For Date Field
  56. Enter Text or Macro Number:
  57.  
  58.  
  59.  
  60.  
  61. */
  62. //**********************
  63. //*****  Includes  *****
  64. //**********************
  65.  
  66. #include <proto/all.h>
  67. #include <stdio.h>
  68.  
  69. #include <string.h>
  70. #include <tempest/headers.h>
  71. #include <skeleton/commas.h>
  72.  
  73. //********************************
  74. //*****  Structures/Defines  *****
  75. //********************************
  76.  
  77. struct MyMessage
  78.  {
  79.   struct Message Msg;
  80.   struct User User;
  81.   char text[255];
  82.   char text1[255];
  83.   int car,Value,Data;
  84.   long LongValue;
  85.   int  IntValue;
  86.  };
  87.  
  88. struct User User;
  89. struct User User1;
  90. struct MsgPort *MyPort = NULL;
  91. struct MyMessage *msg;
  92. struct Catalog Catalog;
  93. struct SystemData SystemData;
  94. struct File_Area File_Area[41];          /* To Read Files.Data */
  95.  
  96. #define DROP if(EXIT_FLAG) CloseStuff();
  97.  
  98. void CloseStuff();
  99. void GetStr(char s[],int opt);
  100. void input(char mstring[],int len);
  101. int  DOORIO();
  102. void TakeCredits(void);
  103. int FindUserSlot(void);
  104. void GetFileInfo(int ,int );
  105. void LoadUserSlot(int);
  106. void SaveUserSlot(int);
  107.  
  108.  
  109.  
  110. int  EXIT_FLAG, DOOR_DATA, DOOR_CAR, DOOR_VALUE, DOOR_VALUE1 = 0,first = 0;
  111. int  in,out;
  112. char DOOR_MSG [255],DOOR_MSG1[255],MyName[255],st[100];
  113. char string1[255],string2[255],string3[255],border[100];
  114. int  Conference,FileNumber,fd,stat,c,i=0;
  115. void Activity(BYTE);
  116. void SetValue(int, int);
  117. char DateMacros[10][9] = { "-Deleted","==Nuked=","-Ancient","-Offline","-NoPacks",
  118.                             "==Fake==","=Broken=","-Renamed","Very olD","=Banned=" };
  119.  
  120. char LineMacros[5][35] = { "=***= FAKE =***=","=***= Very olD =***=",
  121.                            "=***= NOT ALLOWED =***=","=***= DUPLICATE UPLOAD =***=" };
  122.  
  123.  
  124.  
  125. /*****************************/
  126. /*****  PL (Print Line)  *****/
  127. /*****************************/
  128.  
  129. void pl(fmt,a1,a2,a3,a4,a5,a6)
  130. char *fmt;
  131.  {
  132.   char s[255];
  133.   sprintf(s,fmt,a1,a2,a3,a4,a5,a6);
  134.   DOOR_DATA=1; strcpy(DOOR_MSG,s); DOORIO();
  135.  }
  136.  
  137. //***********************
  138. //*****  SYSOP-LOG  *****
  139. //***********************
  140. void SLOG(fmt,a1,a2,a3,a4,a5,a6)
  141. char *fmt;
  142.  {
  143.   char s[255];
  144.   sprintf(s,fmt,a1,a2,a3,a4,a5,a6);
  145.   DOOR_DATA=61; strcpy(DOOR_MSG,s); DOORIO();
  146.  }
  147.  
  148.  
  149. //******************
  150. //*****  Main  *****
  151. //******************
  152.  
  153. void main(int argc,char *argv[])
  154. {
  155.  char DataPath[255];
  156.  int x;
  157.  if(!DoorStart(argv[1])) { puts("Tempest Door!\n"); exit(0); }
  158.  
  159.  Activity(26);
  160.  SetValue(1,3);
  161.  
  162. //********************************
  163. //*****  Load Internal.Data  *****
  164. //********************************
  165.  
  166.  GetStr(DataPath,0);
  167.  sprintf(string1,"%sSetup/SystemData.DATA",DataPath);
  168.  fd=Open(string1,MODE_OLDFILE);
  169.  if(fd==0) CloseStuff();
  170.  Read(fd,(char *)&SystemData, sizeof(struct SystemData));
  171.  Close(fd);
  172.  
  173. //****************************
  174. //*****  Load File.Data  *****
  175. //****************************
  176.  
  177.  sprintf(string2,"%sSetup/Files.DATA",DataPath);
  178.  fd=Open(string2,MODE_OLDFILE);
  179.  do
  180.   {
  181.    Read(fd,(char *)&File_Area[i], sizeof(struct File_Area));
  182.    i++;
  183.   }
  184.  while(i<40);
  185.  Close(fd);
  186.  
  187. //*************************
  188. //*****  The Heading  *****
  189. //*************************
  190.  
  191. // pl("\r\n\r\n[NUKE Module v0.8[Tempest Faker]   By Michael Bockert [02-01-94]\r\n");
  192. // pl("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n");
  193.  
  194. //*************************************
  195. //*****  Enter Conference Number  *****
  196. //*************************************
  197.  
  198.  CONFERENCE:
  199. /*
  200.  strcpy(string1,"");
  201.  pl("\r\n[Return = QuitConference Number: ");
  202.  input(string1,2);
  203.  if(string1[0] == NULL)
  204.   {
  205.    pl("\r\n\r\n");
  206.    CloseStuff();
  207.   }
  208.  Conference = atoi(string1);
  209. */
  210.  Conference = User.FB_J;
  211.  
  212. //*******************************
  213. //*****  Enter File Number  *****
  214. //*******************************
  215.  
  216.  FILENUMBER:
  217.  
  218.  strcpy(string1,"");
  219.  pl("\r\n[Return = AbortKill Files, Enter File Number: ");
  220.  input(string1,5);
  221.  if(string1[0] == NULL) CloseStuff();
  222.  FileNumber = atoi(string1);
  223.  
  224. //******************************
  225. //*****  Get Catalog Info  *****
  226. //******************************
  227.  
  228.  GetFileInfo(Conference,FileNumber);
  229.  
  230.  if(Catalog.Flags & 0x08)
  231.   {
  232.    pl("\r\nThis file is protected from deletion!");
  233.    goto FILENUMBER;
  234.   }
  235.  
  236.  
  237. //***********************
  238. //*****  Kill Menu  *****
  239. //***********************
  240.  
  241.  KILLMENU:
  242.  
  243.  strcpy(border,"===============================================================================");
  244.  pl("\fCONFERENCE [%d:%s]\r\n\r\n",Conference,File_Area[Conference].Name);
  245.  pl(" No. File Name    Date        Size Description\r\n");
  246.  pl("%s\r\n",border);
  247.  pl("%4d %-12s %8s %7ld:%-s\r\n",
  248.          FileNumber,Catalog.FileName,Catalog.DateU,Catalog.Bytes,Catalog.Line[0]);
  249.  
  250.  for(x=1;x<11;x++)
  251.   {
  252.    pl("                                  :%-s\r\n",Catalog.Line[x]);
  253.   }
  254.  if(Catalog.Flags & 0x01) strcpy(string2,"Online");
  255.  else                     strcpy(string2,"Offline");
  256.  
  257.  pl("Listing Status%7s           :%-s\r\n",string2,Catalog.Line[11]);
  258.  pl("  Drive Status:                   [%s]\r\n",Catalog.Uploader);
  259.  pl("%s\r\n",border);
  260.  pl(" Remove from Catalog / Take Credits    Macros for Date Field\r\n");
  261.  pl(" Delete from Drive   / Take Credits    Macros for Last description line\r\n");
  262.  pl(" From Catalog, Drive / Take Credits    Leave Warning to Uploader\r\n");
  263.  pl(" Take credits only                     Give credits back to downloaders\r\n\r\n");
  264.  pl("[Return = NoneSelect [1-6]: ");
  265.  input(string1,1);
  266.  
  267. //*****************
  268. //*****  1-4  *****
  269. //*****************
  270.  
  271.  c=atoi(string1);
  272.  if(c == 0) goto FILENUMBER;
  273.  if((c > 0) && (c < 5))
  274.   {
  275.    if((c==1) || (c==3))
  276.     {
  277.      Catalog.Flags &=~0x01;
  278. //     sprintf(string,"%s%s.Dsc-%d",SystemData.MSG,Catalog.FileName,Conference);
  279. //     DeleteFile(string);
  280.      Catalog.Flags &=~0x04;  // ExtDesc=0
  281.     }
  282.  
  283.    if((c == 2) || (c == 3))
  284.     {
  285.      Catalog.Flags |= 0x20;
  286.  
  287.      strcpy(string1,Catalog.FileName);
  288.      x=OnlineFile(Conference,string1);
  289.      if(x==0) pl("File (%s) was not found.\r\n",string1);
  290.      else
  291.       {
  292.        AGAIN:
  293.        pl("\r\n(D)elete File, (L)ock out & Delete, (A)bort [D,L,A]? ");
  294.        input(string2,1);
  295.        string2[0]=toupper(string2[0]);
  296.        switch(string2[0])
  297.         {
  298.          case 'A': break;
  299.          case 'L': fd=Open(string1,MODE_NEWFILE);
  300.                    Close(fd);
  301.                    break;
  302.          case 'D': DeleteFile(string1); break;
  303.          default:  goto AGAIN;
  304.         }
  305.        if(string2[0]!='A')
  306.         {
  307.          strcpy(string1,Catalog.FileName);
  308.          sprintf(string2,"[Killed off Disk]: %s\n",string1);
  309.          pl("\r%s\r",string2);
  310.          SLOG(string2);
  311.         }
  312.       }
  313.     }
  314.    SaveFileSlot(Conference,FileNumber);
  315.    TakeCredits();
  316.    goto FILENUMBER;
  317.   }
  318.  else
  319.   {
  320. //*****************************
  321. //*****  Macros For Date  *****
  322. //*****************************
  323.    if(c == 5)
  324.     {
  325.      pl("\r\n\r\n%s\r\n",border);
  326.      pl("Quick Macros [For Date]\r\n");
  327.      pl("%s\r\n",border);
  328.      pl("0: %s      2: %s      4: %s      6: %s      8: %s\r\n",
  329.                        DateMacros[0],DateMacros[2],DateMacros[4],DateMacros[6],DateMacros[8]);
  330.      pl("1: %s      3: %s      5: %s      7: %s      9: %s\r\n",
  331.                        DateMacros[1],DateMacros[3],DateMacros[5],DateMacros[7],DateMacros[9]);
  332.      pl("%s\r\n\r\n",border);
  333.      pl("                           [--/--/--]\r\n");
  334.      pl("Enter Text or Macro Number: ");
  335.      input(string1,8);
  336.      if(string1[0] == NULL)
  337.         goto KILLMENU;
  338.      if(string1[1] != NULL)
  339.         strcpy(Catalog.DateU,string1);
  340.      else
  341.       {
  342.        i = atoi(string1);
  343.        strcpy(Catalog.DateU,DateMacros[i]);
  344.       }
  345.      SaveFileSlot(Conference,FileNumber);
  346.      goto KILLMENU;
  347.     }
  348.    else
  349.     {
  350. //**********************************
  351. //*****  Macros For Last Line  *****
  352. //**********************************
  353.      if(c == 6)
  354.       {
  355.        pl("\r\n\r\n%s\r\n",border);
  356.        pl("Quick Macros [For Last Line Description]\r\n");
  357.        pl("%s\r\n",border);
  358.        pl("0: %s\r\n",LineMacros[0]);
  359.        pl("1: %s\r\n",LineMacros[1]);
  360.        pl("2: %s\r\n",LineMacros[2]);
  361.        pl("3: %s\r\n",LineMacros[3]);
  362.        pl("%s\r\n\r\n",border);
  363.        pl("                           [----*----|----*----|----*----|----+----*----]\r\n");
  364.        pl("Enter Text or Macro Number: ");
  365.        input(string1,44);
  366.        if(string1[0] == NULL) goto KILLMENU;
  367.        if(string1[1] == NULL)
  368.         {
  369.          i = atoi(string1);
  370.          if(i>1) strcpy(Catalog.Line[11],LineMacros[i]);
  371.         }
  372.        else strcpy(Catalog.Line[11],string1);
  373.        SaveFileSlot(Conference,FileNumber);
  374.        goto KILLMENU;
  375.       }
  376.     }
  377.   }
  378.  goto FILENUMBER;
  379. }
  380.  
  381. //**************************
  382. //*****  Take Credits  *****
  383. //**************************
  384.  
  385. void TakeCredits(void)
  386. {
  387.  int Credits,UserSlot;
  388.  long CreditBytes;
  389.  pl("\r\n\r\nRemove Credits? [Return = No] [1x-9x]: ");
  390.  input(string1,1);
  391.  if((string1[0] == NULL) || (string1[0] == 'n') || (string1[0] == 'N'))
  392.      return;
  393.  Credits = atoi(string1);
  394.  UserSlot = FindUserSlot();
  395.  if(UserSlot == -1)
  396.   {
  397.    pl("\r\nHandle not found in accounts!\r\n");
  398.    return;
  399.   }
  400.  LoadUserSlot(UserSlot);
  401.  if(Credits < 1)      // Minimum Safty Check
  402.     Credits = 1;
  403.  pl("\r\n[%25.25sOld Stats:  %13s UL Bytes %4d # Uploads\r\n",
  404.      Catalog.Uploader,commas(User1.Total_ULBytes,buff),User1.Total_ULFiles);
  405.  CreditBytes = Credits * Catalog.Bytes;
  406.  pl("                                      - %13s    Bytes %4d   Uploads\r\n",
  407.      commas(CreditBytes,buff),Credits);
  408.  pl("                                      =========================|===============\r\n");
  409.  if(CreditBytes > User1.Total_ULBytes)
  410.     User1.Total_ULBytes = 0;
  411.  else
  412.     User1.Total_ULBytes = User1.Total_ULBytes - CreditBytes;
  413.  if(Credits > User1.Total_ULFiles)
  414.     User1.Total_ULFiles = 0;
  415.  else
  416.     User1.Total_ULFiles -= Credits;
  417.  pl("                            New Stats:  %13s UL Bytes %4d # Uploads\r\n",
  418.      commas(User1.Total_ULBytes,buff),User1.Total_ULFiles);
  419.  SaveUserSlot(UserSlot);
  420.  return;
  421. }
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428. int OnlineFile(Area,Filename)
  429. int Area;
  430. char Filename[];
  431. {
  432.  char string1[200],final[200];
  433.  int stat,x;
  434.  FILE *in;
  435.  
  436.  sprintf(final,"%s%s",File_Area[Area].Path,Filename);
  437.  if(access(final,0L)==0)
  438.   {
  439.    strcpy(Filename,final);
  440.    return(1);
  441.   }
  442.  sprintf(final,"%sDownloads.opt",SystemData.OptionalDirPath);
  443.  in=fopen(final,"r");
  444.  if(in!=NULL)
  445.   {
  446.    while(fgets(string1,79,in)!=NULL)
  447.     {
  448.      string1[strlen(string1)-1] = '\0';
  449.      sprintf(final,"%s%s",string1,Filename);
  450.      if(access(final,0)==0)
  451.       {
  452.        fclose(in);
  453.        strcpy(Filename,final);
  454.        return(1);
  455.       }
  456.     }
  457.    fclose(in);
  458.   }
  459.  return(0);
  460. }
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476. //***********************************
  477. //*****  Find User Slot Number  *****
  478. //***********************************
  479.  
  480. int FindUserSlot(void)
  481. {
  482.  int Slot=0;
  483.  char string1[255];
  484.  GetStr(string1,1);
  485.  strcat(string1,"Accounts.INX");
  486.  if(!(fd=Open(string1,MODE_OLDFILE)))
  487.     return(-2);
  488.  NEXTFILE:
  489.  stat=Read(fd,string1,31);
  490.  if(stat<1)
  491.   {
  492.    Close(fd);
  493.    return(-1);       // No Match was found Return Error
  494.   }
  495.  if(stricmp(string1,Catalog.Uploader)==0)
  496.   {
  497.    Close(fd);
  498.    return(Slot);     // Slot Number Found Return Ok
  499.   }
  500.  Slot++;
  501.  goto NEXTFILE;
  502. }
  503. //********************************
  504. //*****  Read Catalog Entry  *****
  505. //********************************
  506.  
  507. void GetFileInfo(int Area,int Slot)
  508. {
  509.  char string[80],temp[50];
  510.  long size,FilePos;
  511.  Slot--;
  512.  sprintf(temp,"%d",Area);
  513.  sprintf(string,"%sCatalog.%s",SystemData.CatalogsPath,temp);
  514.  in=Open(string,MODE_OLDFILE);
  515.  size=(long)sizeof(struct Catalog);
  516.  FilePos=(long)size*(long)Slot;
  517.  if(in==0)
  518.   {
  519.    pl("\r\nNo files uploaded yet.\r\n\r\n");
  520.    CloseStuff();
  521.   }
  522.  stat=Seek(in,FilePos,0);
  523.  if(stat!=0)
  524.   {
  525.    Close(in);
  526.    pl("\r\nNumber out of range!\r\n\r\n");
  527.    CloseStuff();
  528.   }
  529.  setmem(&Catalog,sizeof(struct Catalog),NULL);
  530.  stat=Read(in,(char *)&Catalog,sizeof(struct Catalog));
  531.  if(stat<1)
  532.   {
  533.    Close(in);
  534.    CloseStuff();
  535.   }
  536.  Close(in);
  537. }
  538.  
  539. //*********************************
  540. //*****  Write Catalog Entry  *****
  541. //*********************************
  542.  
  543. int SaveFileSlot(int Area,int Slot)
  544. {
  545.  char string[80];
  546.  long size,FilePos;
  547.  Slot--;
  548.  sprintf(string,"%sCatalog.%d",SystemData.CatalogsPath,Area);
  549.  out=Open(string,MODE_OLDFILE);
  550.  size=(long)sizeof(struct Catalog);
  551.  FilePos=(long)size*(long)Slot;
  552.  if(out==0)
  553.   {
  554.    pl("\r\n No files have been uploaded yet.\r\n\r\n");
  555.    CloseStuff();
  556.   }
  557.  stat=Seek(out,FilePos,0);
  558.  if(stat!=0)
  559.   {
  560.    Close(out);
  561.    pl("\r\Cant find that file!\r\n\r\n");
  562.    CloseStuff();
  563.   }
  564.  stat=Write(out,(char *)&Catalog,sizeof(struct Catalog));
  565.  if(stat==-1)
  566.   {
  567.    Close(out);
  568.    CloseStuff();
  569.   }
  570.  Close(out);
  571.  return(0);
  572. }
  573.  
  574. //*****************************
  575. //*****  Read User Entry  *****
  576. //*****************************
  577.  
  578. void LoadUserSlot(int UserSlot)
  579. {
  580.  char string[80];
  581.  long size,FilePos;
  582.  GetStr(string,1);
  583.  strcat(string,"Accounts.Data");
  584.  in=Open(string,MODE_OLDFILE);
  585.  size=(long)sizeof(struct User);
  586.  FilePos=(long)size*(long)UserSlot;
  587.  if(in==0)
  588.     CloseStuff();
  589.  stat=Seek(in,FilePos,0);
  590.  if(stat!=0)
  591.   {
  592.    Close(in);
  593.    CloseStuff();
  594.   }
  595.  setmem(&User1,sizeof(struct User),NULL);
  596.  stat=Read(in,(char *)&User1,sizeof(struct User));
  597.  if(stat<1)
  598.   {
  599.    Close(in);
  600.    CloseStuff();
  601.   }
  602.  Close(in);
  603. }
  604.  
  605. //******************************
  606. //*****  Write User Entry  *****
  607. //******************************
  608.  
  609. void SaveUserSlot(int UserSlot)
  610. {
  611.  char string[255];
  612.  long size,FilePos;
  613.  GetStr(string,1);
  614.  strcat(string,"Accounts.Data");
  615.  out=Open(string,MODE_OLDFILE);
  616.  size=(long)sizeof(struct User);
  617.  FilePos=(long)size*(long)UserSlot;
  618.  if(out==0)
  619.     CloseStuff();
  620.  stat=Seek(out,FilePos,0);
  621.  if(stat!=0)
  622.   {
  623.    Close(out);
  624.    CloseStuff();
  625.   }
  626.  stat=Write(out,(char *)&User1,sizeof(struct User));
  627.  if(stat==-1)
  628.   {
  629.    Close(out);
  630.    CloseStuff();
  631.   }
  632.  Close(out);
  633. }
  634.  
  635. //*************************
  636. //*****  Close Stuff  *****
  637. //*************************
  638.  
  639. void CloseStuff(void)
  640. {
  641.  SetValue(0,3);
  642.  
  643.  DOOR_DATA=99; strcpy(DOOR_MSG,'\0'); DOORIO();
  644.  while(msg=(struct MyMessage *)GetMsg(MyPort)) ReplyMsg((struct Message *)msg);
  645.  if(MyPort) DeletePort(MyPort);
  646.  exit(0); }
  647.  
  648. //************************
  649. //*****  Door Start  *****
  650. //************************
  651.  
  652. DoorStart(char node[])
  653. {
  654.  struct MsgPort *HisPort;
  655.  EXIT_FLAG = 0;
  656.  sprintf(st,"%s:TEMPEST_DOOR",node);
  657.  HisPort = FindPort(st);
  658.  if(HisPort==NULL) return (FALSE);
  659.  sprintf(MyName,"%s:DOOR_PORT",node);
  660.  MyPort = CreatePort(MyName,0L);
  661.  if(MyPort==NULL)
  662.   {
  663.    puts("Cant open port");
  664.    return(int)FALSE;
  665.   }
  666.  DOORIO();
  667.  return (int)TRUE;
  668. }
  669.  
  670. //********************
  671. //*****  DoorIO  *****
  672. //********************
  673.  
  674. int DOORIO(void)
  675. {
  676.  struct MsgPort *HisPort;
  677.  struct MyMessage message;
  678.  int UPDATE;
  679.  if(EXIT_FLAG) return 0;
  680.  UPDATE=0;
  681.  HisPort = FindPort(st);
  682.  if(HisPort!=NULL)
  683.   {
  684.    message.Msg.mn_Node.ln_Type = NT_MESSAGE;
  685.    message.Msg.mn_Length = sizeof(message);
  686.    message.Msg.mn_ReplyPort = MyPort;
  687.    if(first)CopyMem(&User,&message.User,sizeof(struct User));
  688.    message.car   = 0;
  689.    message.Data  = DOOR_DATA;
  690.    message.Value = DOOR_VALUE;
  691.    message.IntValue = DOOR_VALUE1;
  692.    strcpy(message.text,DOOR_MSG);
  693.    strcpy(message.text1,DOOR_MSG1);
  694.    PutMsg((struct MsgPort *)HisPort,(struct Message *)&message);
  695.    Wait(1 << MyPort->mp_SigBit);
  696.    GetMsg(MyPort);
  697.    DOOR_DATA  = message.Data;
  698.    DOOR_VALUE = message.Value;
  699.    DOOR_VALUE1 = message.IntValue;
  700.    strcpy(DOOR_MSG,message.text);
  701.    strcpy(DOOR_MSG1,message.text1);
  702.    CopyMem(&message.User,&User,sizeof(struct User));
  703.    first=1;
  704.    UPDATE=0;
  705.    if(message.car) EXIT_FLAG=1;
  706.   }
  707.  return 0;
  708. }
  709.  
  710. //*********************************
  711. //*****  GetStr (Get String)  *****
  712. //*********************************
  713.  
  714. void GetStr(char s[],int opt)
  715. { DOOR_DATA=15; DOOR_VALUE=opt; strcpy(s,'\0'); DOORIO(); strcpy(s,DOOR_MSG); }
  716.  
  717. //*******************
  718. //*****  Input  *****
  719. //*******************
  720.  
  721. void input(char mstring[],int len)
  722. { DOOR_DATA=40; DOOR_VALUE=len; strcpy(DOOR_MSG,mstring); DOORIO();
  723.  strcpy(mstring,DOOR_MSG); strcpy(DOOR_MSG,'\0'); strcpy(DOOR_MSG1,'\0'); DROP; }
  724.  
  725.  //**********************
  726.  //*****  Activity  *****
  727.  //**********************
  728.  
  729.  void Activity(BYTE act)
  730.  { DOOR_DATA=72; DOOR_VALUE=act; DOORIO(); }
  731.  
  732.  void SetValue(int opt1,int opt)
  733.  { DOOR_DATA=17; DOOR_VALUE1 = opt1; DOOR_VALUE=opt; DOORIO(); }
  734.